package org.azmat.demojpa.SQL.JPA.Service;

import org.azmat.demojpa.SQL.JPA.Dao.CourseDao;
import org.azmat.demojpa.SQL.JPA.Entity.Course;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CourseService {
    @Autowired
    private CourseDao courseDao;


    // 使用JpaRepository的API查询，DAO层无须手动编写SQL或JPQL语句
    // 查询所有课程，不分页，相当于SQL：SELECT * FROM course
    public List<Course> findAll() {
        return courseDao.findAll();
    }

    // 查找所有课程，有排序，相当于SQL：SELECT * FROM course ORDER BY xxx DESC|ASC
    public List<Course> findAll(Sort sort) {
        return courseDao.findAll(sort);
    }

    // 查找所有课程，有分页，相当于SQL：SELECT * FROM course LIMIT x,y;
    public Page<Course> findAll(Pageable pageable) {
        return courseDao.findAll(pageable);
    }

    // 查找某个编号的课程，相当于SQL：SELECT * FROM course WHERE id = ?;
    public Course findById(int id) {
        return courseDao.findById(id).orElse(new Course());
    }

    // 若参数的主键存在，则进行更新操作
    public void updateCourses(Course course) {
        courseDao.save(course);
    }

    // 若参数的主键不存在，则进行插入操作
    public void addCourses(Course course) {
        courseDao.save(course);
    }

    // 删除某个编号的课程，相当于SQL：DELETE FROM course WHERE id = ?;
    public void deleteCourses(int id) {
        courseDao.deleteById(id);
    }

    // 查询学分为xx的选修(或必修)课
    public List<Course> findByCourseScoreAndCourseType(int credit, String courseType) {
        return courseDao.findByCourseScoreAndCourseType(credit, courseType);
    }

    // 查询学分为xx或者选修(或必修)的课程
    public List<Course> findByCourseScoreOrCourseType(int credit, String courseType) {
        return courseDao.findByCourseScoreOrCourseType(credit, courseType);
    }

    // 查询课时在xxx到xxx的课程
    public List<Course> findByCourseHourBetween(int start, int end) {
        return courseDao.findByCourseTimeBetween(start, end);
    }

    // 查询课时小于xx的课程
    public List<Course> findByCourseHourLessThan(int credit) {
        return courseDao.findByCourseTimeLessThan(credit);
    }

    // 查询课程名称包含xx的课程
    public List<Course> findByCourseNameLike(String name) {
        return courseDao.findByCourseNameContaining(name);
    }

    public List<Course> selectCourses1(int CourseScore) {
        return courseDao.selectScore1(CourseScore);
    }

    public List<Course> selectCourses2(int CourseScore, int CourseTime) {
        return courseDao.selectScore2(CourseScore, CourseTime);
    }

    public List<Course> selectCourses3(int CourseScore) {
        return courseDao.selectScore3(CourseScore);
    }

    public List<Course> selectCourses4(int CourseScore) {
        return courseDao.selectScore4(CourseScore);
    }

    public List<Course> selectCourses5(String CourseName) {
        return courseDao.selectName1(CourseName);
    }

    // 更新课程信息
    public void updateCourse(String courseName, int courseScore, int courseTime, String courseType, int courseId) {
        courseDao.updateCourse(courseName, courseScore, courseTime, courseType, courseId);
    }

}
